package _07randomAccessFile;

import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.Scanner;

public class Exercise {

    public static void main(String[] args) throws IOException {
        RandomAccessFile ra = new RandomAccessFile("box.idx", "r");
        Scanner sc = new Scanner(System.in);
        // RandomAccessFile练习

        // 1. 用r方式打开box.idx (欢乐推箱子的地图数据文件)

        // 2. 用户输入关卡编号id(1~208)
        System.out.print("输入关卡编号id(1~208)");
        int checkpoint = sc.nextInt();
        // 3. 使用seek到 4*id的位置
        ra.seek(4 * (checkpoint - 1));

        // 4. 读取一个int 得到这个关卡的数据的偏移位置posA
        int posA = ra.readInt();
        System.out.println("第" + (checkpoint) + "关地址：00000" + Integer.toHexString(posA));

        // 5. 使用seek到 4*(id+1)的位置
        ra.seek(4 * (checkpoint));

        // 6. 读取一个int 得到这个下一个关卡的数据的偏移位置posB
        int posB = ra.readInt();
        System.out.println("第" + (checkpoint + 1) + "关地址：00000" + Integer.toHexString(posB));

        // 7. 计算id关卡的长度lenth = posB - posA +5
        int length = posB - posA;
        System.out.println(length);

        // 8. seek到 posA的位置
        ra.seek(posA);
        // 9. 读取关卡数据(字节数组)，读取长度length的数据，打印显示
        byte[] data = new byte[1024];
        ra.read(data, 0, length);

//		System.out.println(Arrays.toString(data));
        int width = data[3];
        int height = data[4];
        System.out.println("地图大小" + width + "*" + height);

        for (int i = 0; i < height; i++) {
            for (int j = 0; j < width; j++) {
                System.out.print(data[5 + i * width + j]);
            }
            System.out.println();
        }

    }

}